<?php
class carrito 
{
	//atributos de la clase
   public $num_producto;
   private $cod_factura;
   private $cod_prod;
   private $cantidad;
	private $descuento;
	private $neto;
	private $iva;
	private $total;
	private $precio_venta;
   private $costo;
	private $nombre_prod;

	//constructor. Realiza las tareas de inicializar los objetos cuando se instancian
	//inicializa el numero de productos a 0
	function carrito() 
	{
   	   $this->num_producto=0;
	}
	
	function setcod_factura($cod_factura,$linea)
	{
	   $this->cod_factura[$linea]=$cod_factura;
	}
	
	function setcod_prod($cod_prod,$linea)
	{
	   $this->cod_prod[$linea]=$cod_prod;
	}
	
	function setcantidad($cantidad,$linea)
	{
	  $this->cantidad[$linea]=$cantidad;
	}
	function setcosto($costo,$linea)
    {
       $this->costo[$linea] = $costo;
    }
	function setdescuento($descuento,$linea)
	{
	   $this->descuento[$linea]=$descuento;
	}
	
	function setneto($neto,$linea)
	{
	  $this->neto[$linea]=$neto;
	}

	function setprecio_venta($precio_venta,$linea)
	{
	  $this->precio_venta[$linea]=$precio_venta;
	}

	function setiva($iva,$linea)
	{
	  $this->iva[$linea]=$iva;
	}
	
	function settotal($total,$linea)
	{
	  $this->total[$linea]=$total;
	}
	
	function setnombre_prod($nombre_prod,$linea)
	{
	   $this->nombre_prod[$linea]=$nombre_prod;
	}
	
	function getcod_factura($num)
	{
	   return $this->cod_factura[$num];
	}
	
	function getcod_prod($num)
	{
	   return $this->cod_prod[$num];
	}
	
	function getcantidad($num)
	{
	  return $this->cantidad[$num];
	}

    function getcosto($num)
    {
      return $this->costo[$num];
    }

    function getdescuento($num)
	{
	   return $this->descuento[$num];
	}
	
	function getneto($num)
	{
	  return $this->neto[$num];
	}
	
	function getprecio_venta($num)
	{
	  return $this->precio_venta[$num];
	}
	
	function getiva($num)
	{
	  return $this->iva[$num];
	}
	
	function gettotal($num)
	{
	  return $this->total[$num];
	}
	
	function getnombre_prod($num)
	{
	   return $this->nombre_prod[$num];
	}
	
   //Retorna valor de la ultima posicion del array
	function getnum_producto()
	{
	   return $this->num_producto;
	}
   
   //Retorna la posicion del producto en el array
   function getpos_producto($cod_prod)
   {
      //recorre cada producto ingresado
     for( $i = 0 ; $i < $this->getnum_producto() ; $i++ )
	  {
       //compara el codigo del producto con el codigo que se quiere ingresar
	    if( $this->getcod_prod($i) != -1 && $this->getcod_prod($i) == $cod_prod)
       {
         //si existe retorna la linea del producto
	      return (int)$i;
	    }	   
	  }
     
     return false;
      
   }
   
	//valida si el producto esta ingresado en el carrito
   function existe_producto($cod_prod)
   {
     
	  //recorre cada producto ingresado
     for( $i = 0 ; $i < $this->getnum_producto() ; $i++ )
	  {
       //compara el codigo del producto con el codigo que se quiere ingresar
	    if( $this->getcod_prod($i) != -1 && $this->getcod_prod($i) == $cod_prod)
       {
         //si existe retorna verdadero
	      return true;
	    }	   
	  }
     
     //Si no existe un producto ingresado con el mismo codigo retorna falso
	  return false;
      
   }
   
   //Introduce un producto en el array
	function introduce_producto($cod_factura,$cod_prod,$cantidad,$descuento,$precio,$nombre_prod,$costo)
	{
      
      //Si el producto no existe en el carrito, lo ingresa normalmente
		if(!$this->existe_producto($cod_prod))
      {
         
        $neto = $cantidad * ($precio - round($precio * $descuento/100));
		  $iva = round($neto * 0.19);
		  $total = $neto + $iva;
		  $this->setcod_factura($cod_factura,$this->num_producto);
		  $this->setnombre_prod($nombre_prod,$this->num_producto);
        $this->setcod_prod($cod_prod,$this->num_producto);
		  $this->setcantidad($cantidad,$this->num_producto);
		  $this->setdescuento($descuento,$this->num_producto);
		  $this->setneto($neto,$this->num_producto);
		  $this->setprecio_venta($precio - round($precio * $descuento/100),$this->num_producto);
		  $this->setiva($iva,$this->num_producto);
		  $this->settotal($total,$this->num_producto);
		  $this->setcosto($costo,$this->num_producto);
		  $this->num_producto++;
      } //si el producto existe en el carrito, actualiza la cantidad y neto
      else
      {
         //obtiene posicion del producto
         $pos = $this->getpos_producto($cod_prod);
         
         //obtiene cantidad actual y se suma a la nueva cantidad
         $cantidadActual = $this->getcantidad($pos);
         $cantidad = $cantidad + $cantidadActual;
         
         //recalcula todo con la nueva cantidad y valores ingresados
         $neto = $cantidad * ($precio - round($precio * $descuento/100));
		   $iva = round($neto * 0.19);
		   $total = $neto + $iva;
		   $this->setcod_factura($cod_factura,$pos);
		   $this->setnombre_prod($nombre_prod,$pos);
         $this->setcod_prod($cod_prod,$pos);
		   $this->setcantidad($cantidad,$pos);
		   $this->setdescuento($descuento,$pos);
		   $this->setneto($neto,$pos);
		   $this->setprecio_venta($precio - round($precio * $descuento/100),$pos);
		   $this->setiva($iva,$pos);
		   $this->settotal($total,$pos);
		   $this->setcosto($costo,$pos);
      }
      
      return true;
	}
	
	function elimina_producto ($linea)
	{
	   $this->setcod_prod(-1,$linea);
	}

	function vacio()
	{
	   $cont=0; // cuenta los productos activos
	   for($i = 0 ; $i < $this->getnum_producto() ; $i++)
	   {
	     if($this->getcod_prod($i) != -1 && $this->getcantidad($i) > 0)
        {
	        $cont++;
	     }	   
	   }
	   return $cont <= 0;
	}

}
?>